package data;

import io.Dbf;
import java.util.ArrayList;

import javax.swing.table.TableModel;

/**
 * Beinhaltet eine Zuordnung von Interviewernr und Interviewernamen.
 * @author zenjin
 *
 */
public class InterviewerContainer {
	
	private static final int LOGIN = 0;
	private static final int INTERNR = 5;
	private static final int NAME = 2;
	private static final int VORNAME = 1;
	
	private ArrayList<Interviewer> interviewerList;
	private String zugangPath;

	
	/**
	 * Main Konstruktor, erzeugt ein InterviewerContainer Objekt,
	 * und liest direkt die Interviewerinformationen ein.
	 * @param zugangPath Pfad zu den Interviewer-Zugangsdaten.
	 */
	public InterviewerContainer( String zugangPath ) {
		this.zugangPath = zugangPath;
		init();
	}
	
	/**
	 * Liest die Zugangsdaten aus der ZUGANG.DBF ein.
	 */
	public void init() {
		try	{
			Dbf dbf = new Dbf( zugangPath );
			int fields = dbf.getFieldCount();
			ArrayList<String> datanames = new ArrayList<String>();
			for( int i = 0; i < fields; i++ ) {
				datanames.add( dbf.getFeldName( i ) );
		    }
		    
		    int datasets = dbf.getRecCount();
		    
		    interviewerList = new ArrayList<Interviewer>();
		    for( int j = 0; j < datasets; j++ ){
		   		try {
		   			String login = dbf.getString( LOGIN );
	    			int nr = dbf.getInt( INTERNR );
	    			String name = dbf.getString( NAME );
	    			String vorname = dbf.getString( VORNAME );
	    			
	    			DataEntry e_login = new DataEntry( "login", login );
	    			DataEntry e_name = new DataEntry( "name", name );
	    			DataEntry e_vorname = new DataEntry( "vorname", vorname );
	    			DataEntry e_nr = new DataEntry( "nr", nr );
	    			ArrayList<DataEntry> record = new ArrayList<DataEntry>();
	    			record.add( e_login );
	    			record.add( e_name );
	    			record.add( e_vorname );
	    			record.add( e_nr );
	    			dbf.skip();
	    			Interviewer interviewer = 
	    				new Interviewer( record );
	    			interviewerList.add( interviewer );
	    			} catch ( Exception ex ) {
	    			
	    			}
	    	}
	      } catch ( Exception ex ) {
	    	  System.err.println( "FAIL to open dbf: " + zugangPath );
	    }
	}	
	
	/**
	 * Liefert eine entsprechende Interviewernummer zu einem Login.
	 * @param login Login des Interviewers
	 * @return Nummer des Interviewers.
	 */
	public Integer getNrByLogin( String login ) {
		Integer out = -1;
		
		for( Interviewer interviewer : interviewerList ) {
			String actual = interviewer.getLogin(); 
			if( actual.equals( login ) ) {
				out = interviewer.getNr();
			}
		}
		return out;
	}
	
	/**
	 * Liefert den Loginkürzel anhand einer Interviewernummer.
	 * @param nr Interviewernummer.
	 * @return Entprechendes Loginkürzel.
	 */
	public String getLoginByNr( int nr ) {
		String out = "u:";
		out += nr;
		for( Interviewer interviewer : interviewerList ) {
			int actual = interviewer.getNr();
			if( actual == nr ) {
				out = interviewer.getLogin();
			}
		}
		return out;
	}
	/**
	 * Liefert den Namen anhand einer Interviewernummer.
	 * @param nr Interviewernummer.
	 * @return Entprechender Name.
	 */
	public String getNameByNr( int nr ) {
		String out = "u:";
		out += nr;
		for( Interviewer interviewer : interviewerList ) {
			int actual = interviewer.getNr();
			if( actual == nr ) {
				out = interviewer.getName();
			}
		}
		return out;
	}
	/**
	 * Liefert den Vornamen anhand einer Interviewernummer.
	 * @param nr Interviewernummer.
	 * @return Entprechender Vorname.
	 */
	public String getVornameByNr( int nr ) {
		String out = "u:";
		out += nr;
		for( Interviewer interviewer : interviewerList ) {
			int actual = interviewer.getNr();
			if( actual == nr ) {
				out = interviewer.getVorname();
			}
		}
		return out;
	}
	
	public DataSet getDataSet() {
		DataSet dataset = new DataSet();
		for( Interviewer interviewer : interviewerList ) {
			dataset.add( interviewer.getDataRecord() );
		}
		return dataset;
	}
	
}
